package com.ssmr.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = "com.ssmr.demo.dao")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

/*用户抢购， 第一步，按userid productid 在redis查找记录，如果有说明抢购过了，退出；
 * 第二步， watch 版本号或者库存或者both, 读取库存，判断还有没，然后multi里减库存、
 * 加版本，exec, 判断是否成功，未成功则抛出异常
 * 第三步， 发送记录到rabbitmq, 监听消息队列的服务负责把消息写入mysql*/

/*redis事务有缺陷: https://segmentfault.com/a/1190000002594059
 * 不保证原子性，错误命令之前或之后不回滚， 之后的无法查询之前的结果
 * 解决：事务前查询 或者 lua*/

/*事务要用SessionCallBack，否则是不同的网络连接*/